home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE3e.s < prev    next >
Text File  |  1994-10-30  |  7KB  |  201 lines

  1.  
  2. ; Lezione3e.s    Effetto di scorrimento di uno sfondo sfumato
  3.  
  4.  
  5. ;    Routine eseguita 1 volta ogni 3 fotogrammi
  6.  
  7.  
  8.     SECTION    CiriCop,CODE    ; anche in Fast va bene
  9.  
  10. Inizio:
  11.     move.l    4.w,a6        ; Execbase in a6
  12.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  13.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  14.     jsr    -$198(a6)    ; OpenLibrary, routine della EXEC che apre
  15.                 ; le librerie, e da in uscita l'indirizzo
  16.                 ; di base di quella libreria da cui fare le
  17.                 ; distanze di indirizzamento (Offset)
  18.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  19.     move.l    d0,a6
  20.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist
  21.                 ; di sistema
  22.     move.l    #MIACOPPER,$dff080    ; Puntiamo la nostra COP
  23.     move.w    d0,$dff088        ; Facciamo partire la COP
  24. mouse:
  25.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  26.     bne.s    mouse        ; Se non ancora, non andare avanti
  27. frame:
  28.     cmpi.b    #$fe,$dff006    ; Siamo alla linea 254? (deve rifare il giro!)
  29.     bne.s    frame        ; Se non ancora, non andare avanti
  30. frame2:
  31.     cmpi.b    #$fd,$dff006    ; Siamo alla linea 253? (deve rifare il giro!)
  32.     bne.s    frame2        ; Se non ancora, non andare avanti
  33.  
  34.     bsr.s    ScrollColors    ; Una cosiddetta RASTER BAR!
  35.  
  36.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  37.     bne.s    mouse        ; se no, torna a mouse:
  38.  
  39.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  40.     move.w    d0,$dff088        ; facciamo partire la cop
  41.  
  42.     move.l    4.w,a6
  43.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  44.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  45.                 ; (vanno aperte e chiuse le librerie!!!)
  46.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  47.     rts
  48.  
  49.  
  50. ;    Questa routine fa scorrere i 14 colori della nostra copperlist verde
  51. ;    in modo da simulare uno scorrimento verso l'alto continuato, come
  52. ;    se attraverso una fessura vedessimo scorrere una serie illimitata
  53. ;    di barrette sfumate. In pratica sposta ogni volta i colori copiandoli,
  54. ;    partendo copiando il secondo nel primo, il terzo nel secondo ecc., come
  55. ;    se avessimo una fila di palline colorate in serie: supponete di
  56. ;    prendere la seconda e metterla al posto della prima, che vi mettete
  57. ;    in tasca, creando un "buco": proseguirete spostando tutte le palline
  58. ;    una ad una di un posto: la terza al posto della seconda, la quarta
  59. ;    al posto della terza, e cosi' via, fino a che non arrivate alla
  60. ;    quattordicesima (l'ultima) che spostate dove era la tredicesima,
  61. ;    creando il "buco" che prima si trovava al posto della prima.
  62. ;    per tappare questo buco riprendete la prima pallina dalla tasca
  63. ;    e mettetela al posto della quattordicesima (si noti l'ultima istruzione
  64. ;    che infatti e' "move.w col1,col14", ossia dopo aver fatto "scrorrere"
  65. ;    il "buco" dalla prima posizione alla quattordicesima, lo "tappiamo"
  66. ;    con la prima pallina, creando un ciclo di continita' (infinito!) come
  67. ;    lo scorrimento della catena della bicicletta:
  68. ;
  69. ;     >>>>>>>>>>>>>>>>>>>>>    
  70. ;    ^               v
  71. ;     <<<<<<<<<<<<<<<<<<<<
  72. ;
  73. ;    ma senza la parte inferiore della catena: semplicemente quando un
  74. ;    anello della catena (un colore) arriva al termine (v), viene
  75. ;    copiato alla prima posizione (^), rendendo possibile il ciclo
  76. ;    infinito:
  77. ;
  78. ;     >>>>>>>>>>>>>>>>>>>>>    
  79. ;    ^               v
  80. ;
  81. ;    Infatti per interrompere la routine basta eliminare una qualsiasi
  82. ;    delle istruzioni che copiano: provate ad esempio a mettere un ;
  83. ;    alla prima: (move.w col2,col1) e verificherete che scrorre una sola
  84. ;    volta, dopodiche' finiscono i colori, essendo "ROTTO UN ANELLO DELLA
  85. ;    CATENA", che non fornisce piu' il colore precedente.
  86.  
  87.  
  88. Scrollcolors:    
  89.     move.w    col2,col1    ; col2 copiato in col1
  90.     move.w    col3,col2    ; col3 copiato in col2
  91.     move.w    col4,col3    ; col4 copiato in col3
  92.     move.w    col5,col4    ; col5 copiato in col4
  93.     move.w    col6,col5    ; col6 copiato in col5
  94.     move.w    col7,col6    ; col7 copiato in col6
  95.     move.w    col8,col7    ; col8 copiato in col7
  96.     move.w    col9,col8    ; col9 copiato in col8
  97.     move.w    col10,col9    ; col10 copiato in col9
  98.     move.w    col11,col10    ; col11 copiato in col10
  99.     move.w    col12,col11    ; col12 copiato in col11
  100.     move.w    col13,col12    ; col13 copiato in col12
  101.     move.w    col14,col13    ; col14 copiato in col13
  102.     move.w    col1,col14    ; col1 copiato in col14
  103.     rts
  104.  
  105. GfxName:
  106.     dc.b    "graphics.library",0,0    
  107.  
  108. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  109.     dc.l    0    ; della graphics.library
  110.  
  111. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  112.     dc.l    0
  113.  
  114.  
  115. ;=========== Copperlist ==========================
  116.  
  117.  
  118.     section    cop,data_C
  119.  
  120. MIACOPPER:
  121.     dc.w    $100,$200    ; BPLCON0 - schermo senza bitplanes, solo il
  122.                 ; colore di sfondo $180 e' visibile.
  123.  
  124.     DC.W    $180,$000    ; COLOR0 - iniziamo col colore NERO
  125.  
  126.     dc.w    $9a07,$fffe    ; aspettiamo la linea 154 ($9a in esadecimale)
  127.     dc.w    $180        ; REGISTRO COLOR0
  128. col1:
  129.     dc.w    $0f0        ; VALORE DEL COLOR 0 (che sara' modificato)
  130.     dc.w    $9b07,$fffe ; aspettiamo la linea 155 (non sara' modificata)
  131.     dc.w    $180        ; REGISTRO COLOR0 (non sara' modificato)
  132. col2:
  133.     dc.w    $0d0        ; VALORE DEL COLOR 0 (sara' modificato)
  134.     dc.w    $9c07,$fffe    ; aspettiamo la linea 156 (non modificato,ecc.)
  135.     dc.w    $180        ; REGISTRO COLOR0
  136. col3:
  137.     dc.w    $0b0        ; VALORE DEL COLOR 0
  138.     dc.w     $9d07,$fffe    ; aspettiamo la linea 157
  139.     dc.w    $180        ; REGISTRO COLOR0
  140. col4:
  141.     dc.w    $090        ; VALORE DEL COLOR 0
  142.     dc.w    $9e07,$fffe    ; aspettiamo la linea 158
  143.     dc.w    $180        ; REGISTRO COLOR0
  144. col5:
  145.     dc.w    $070        ; VALORE DEL COLOR 0
  146.     dc.w    $9f07,$fffe    ; aspettiamo la linea 159
  147.     dc.w    $180        ; REGISTRO COLOR0
  148. col6:
  149.     dc.w    $050        ; VALORE DEL COLOR 0
  150.     dc.w    $a007,$fffe    ; aspettiamo la linea 160
  151.     dc.w    $180        ; REGISTRO COLOR0
  152. col7:
  153.     dc.w    $030        ; VALORE DEL COLOR 0
  154.     dc.w    $a107,$fffe    ; aspettiamo la linea 161
  155.     dc.w    $180        ; color0... (ora avete capito i commenti,
  156. col8:                ; posso anche smettere di metterli da qua!)
  157.     dc.w    $030
  158.     dc.w    $a207,$fffe    ; linea 162
  159.     dc.w    $180
  160. col9:
  161.     dc.w    $050
  162.     dc.w    $a307,$fffe    ;  linea 163
  163.     dc.w    $180
  164. col10:
  165.     dc.w    $070
  166.     dc.w    $a407,$fffe    ;  linea 164
  167.     dc.w    $180
  168. col11:
  169.     dc.w    $090
  170.     dc.w    $a507,$fffe    ;  linea 165
  171.     dc.w    $180
  172. col12:
  173.     dc.w    $0b0
  174.     dc.w    $a607,$fffe    ;  linea 166
  175.     dc.w    $180
  176. col13:
  177.     dc.w    $0d0
  178.     dc.w    $a707,$fffe    ;  linea 167
  179.     dc.w    $180
  180. col14:
  181.     dc.w    $0f0
  182.     dc.w     $a807,$fffe    ;  linea 168
  183.  
  184.     dc.w     $180,$0000    ; Decidiamo il colore NERO per la parte
  185.                 ; di schermo sotto l'effetto
  186.  
  187.     DC.W    $FFFF,$FFFE    ; Fine della Copperlist
  188.  
  189.     END
  190.  
  191. MODIFICHE: Provate ad aggiungere questo comando alla fine della routine
  192. "Scrollcolors", ed otterrete un cambiamento dei colori (aggiungiamo 1 alla
  193. componente RED, ossia ROSSO)
  194.  
  195.     add.w   #$100,col13
  196.  
  197. Provate poi a cambiare il valore dell'add, per ottenere variazioni di colore
  198. diverse. Chiaramente e' un sistema un po' approssimativo per fare sfumature,
  199. ma puo' essere utile per sincerarsi di aver capito la routine.
  200.  
  201.